package work;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import constant.Constant;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //1. 建立连接
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost(Constant.Host); // 部署消息队列的服务器ip
        connectionFactory.setPort(Constant.Port);
        connectionFactory.setUsername(Constant.userName); // 消息队列的用户和密码
        connectionFactory.setPassword(Constant.password);
        connectionFactory.setVirtualHost(Constant.VirtualHost); // 要连接的虚拟机
        Connection connection = connectionFactory.newConnection(); // 获得一个连接

        //2. 开启信道
        Channel channel = connection.createChannel();

        //3. 声明交换机 使用内置交换机
        //4. 声明队列(最后生产者要将消息发送到队列)
        /**
         * 参数说明
         * queue: 队列名称
         * durable: 是否可持久化
         * exclusive: 是否独占(是否只能一个消费者进行消费)
         * outoDelete: 是否自动消除
         * arguments: 参数
         */
        channel.queueDeclare(Constant.WORK_QUEUE,true,false,false,null);

        //5. 发送消息
        /**
         *   参数说明
         *   exchange: 交换机名称
         *   routingKey: 内置交换机,和队列名称保持一致
         *   props: 属性配置1
         *   body: 发送的消息
         */
        for (int i = 0; i <10 ; i++) {
            String massage = "hello work_queue!这是第"+i+"条消息";
            channel.basicPublish("",Constant.WORK_QUEUE, null,massage.getBytes());
        }
        System.out.println("发送成功!");
        //6. 资源释放(连接和信道) 先信道后连接
        channel.close();
        connection.close();
    }
}
